package cn.skyisazure.metacompare.sqlcompare.serivce;


import cn.skyisazure.metacompare.sqlcompare.meta.ColumnCM;
import cn.skyisazure.metacompare.sqlcompare.meta.IndexCM;
import cn.skyisazure.metacompare.sqlcompare.meta.TableCM;

import java.util.List;

/**
 * @author wangjj
 * @date 2023/8/18 13:36
 */
interface MetaService {


    // =========以下是获取build语句============
    // =============库=============
    /**
     * 获取创建库语句
     */
    String buildCreateDataSourceSql(String dataSourceName);

    /**
     * 获取删库语句
     */
    String buildDropDataSourceSql(String dataSourceName);

    // =============表=============

    /**
     * 获取创建表语句
     */
    String buildCreateTableSql(TableCM table);

    /**
     * 修改表名
     */
    String buildRenameTableSql(TableCM table);

    /**
     * 获取删表语句
     */
    String buildDropTableSql(TableCM table);

    // =============列=============

    /**
     * 获取创建列的语句
     * @param columnCM
     * @return
     */
    String buildCreateColumnSql(ColumnCM columnCM);

    /**
     * 获取修改一个表的列顺序的语句(一条语句修改整个表的顺序)
     * @return
     */
    String buildAlterColumnPosiSql(List<ColumnCM> sourceOrderColumns);

    /**
     * 修改列信息
     * @param column
     * @return
     */
    List<String> buildAlterColumnSql(ColumnCM column);

    /**
     * 获取删字段语句
     */
    String buildDropColumnSql(ColumnCM columnCM);

    // =============索引=============

    /**
     * 获取创建索引的语句
     * @param indexCM
     * @return
     */
    String buildCreateIndex(IndexCM indexCM);

    /**
     * 索引修改
     * @param indexCM
     * @return
     */
    String buildAlterIndex(IndexCM indexCM);

    /**
     * 删除该索引
     * @return
     */
    String buildDropIndex(IndexCM index);


}
